iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0
自我挑戰組

Asp.Net Core 零基礎建立自己的Blog系列 第 9

[Day 9] Asp.Net core MVC - Ckeditor5 圖片上傳(二)

  • 分享至 

  • xImage
  •  

昨天大家都看到,當在寫文章時使用上傳圖片,圖片就會先預先上傳到後端來。
這時候我們就要開始建立如何處理圖片的程式碼。

建立處理圖片的商務邏輯,像是圖片大小、儲存地方等等,這些算是商務邏輯,
所以會建立一個介面和他的實作。

這邊會利用到DI的技巧與觀念。
可以理解成處理圖片這個動作是寫在一個function裡面,而這個function就像一個工具。

ArticleController.cs 這個檔案要使用這個工具前,需要先跟系統申請說,我需要這一個工具,
而這個申請的行為就是DI(相依性注入)

目標:
1.建立介面與實作
2.跟系統註冊這個工具(介面)

步驟:
step1.建立三個檔案
1.在Applications/ArticleService/Models路徑底下建立ImageUploadResponse.cs 用來裝上傳圖片的結果。

public class ImageUploadResponse
    {
        public int Uploaded { get; set; }
        public string FileName { get; set; } = string.Empty;
        public string Url { get; set; } = string.Empty;
        public string Msg { get; set; } = string.Empty;
    }

2.IArticleService.cs 定義介面(這是全部都會用到的方法,會出錯的話,可以先把還沒實作的先註解)。

public interface IArticleService
    {
        Task<ImageUploadResponse> UploadImage(IFormFile upload);

        Task CreateArticle(string content);

        Task UpdateArticle(UpdateArticleViewModel model);

        Task<IList<Article>> GetArticle(long? id);

        Task<IList<Article>> GetUpdateArticle(long? id);
    }

3.ArticleService.cs 實作文章的商務邏輯。

public async Task<ImageUploadResponse> UploadImage(IFormFile upload)
        {
            if (upload.Length <= 0) return null!;

            var fileName = Guid.NewGuid() + Path.GetExtension(upload.FileName).ToLower();

            var filePath = Path.Combine(
                   Directory.GetCurrentDirectory(), "wwwroot/images",
                   fileName);

            using (var stream = File.Create(filePath))
            {
                //程式寫入的本地資料夾裡面
                await upload.CopyToAsync(stream);
            }

            var url = $"{"/images/"}{fileName}";

            var reslult = new ImageUploadResponse
            {
                Uploaded = 1,
                FileName = fileName,
                Url = url,
                Msg = "sucess",
            };

            return reslult;
        }

step2.跟系統註冊這項服務,想到註冊就要想到program.cs,然後跟系統註冊你的工具。

// 註冊客製化介面
builder.Services.AddTransient<IArticleService, ArticleService>();

做到這裏後,再執行,上傳圖片後應該就會看到有新增圖片了


上一篇
[Day 8] Asp.Net core MVC - Ckeditor5 圖片上傳(一)
下一篇
[Day 10] .Net Core 相依性注入 - DI
系列文
Asp.Net Core 零基礎建立自己的Blog30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言